/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logic;

import gui.CargaArchivosFrame;
import java.io.File;

/**
 *
 * @author do.ob
 */
public class GestorCargaArchivos {

    private File source;
    private CargaArchivosFrame frame;
    private HiloGrabador hiloGrabador;

    public GestorCargaArchivos(CargaArchivosFrame frame) {
        this.frame = frame;
        hiloGrabador = new HiloGrabador();
    }

    public void setSource(File source) {
        this.source = source;
    }

    /**
     * llama al metodo procesarArchivos si y solo siiiii
     * el atributo suorce (seteado por el frame) no es nulo
     */
    public void start() {
        if (source != null) {
            procesarArchivos(source);
        }
    }
    /**
     * POR CADA ARCHIVO:
     * Si file es un directorio se llama recursivamnente sobre su contenido.
     * Si es un archivo(txt o pdf) crea un txtReader o PDF reader pasandole por
     * parametros un DefaultListener que a su vez recibe el archivo a leer y un
     * HiloGrabador.
     * Luego se llama al metodo run() del Reader y se notifica al frame que se
     * esta trabajando sobre el archivo seleccionado.
     * 
     * @param file objeto file q contiene el/los documentos/s a cargar 
     */
    private void procesarArchivos(File file) {
        if (file.isDirectory()) {
            File[] archivos = file.listFiles();
            for (File archivo : archivos) {
                procesarArchivos(archivo);
            }

        } else {
            int extension = getExtension(file.getName());
            if (extension == 1) {
                TxtReader txtR = new TxtReader(file, new DefaultListener(file, hiloGrabador));
                txtR.run();
                frame.setEstadoProcesado(file);
            } else if (extension == 2) {
                PdfReader txtR = new PdfReader(file, new DefaultListener(file, hiloGrabador));
                txtR.run();
                frame.setEstadoProcesado(file);
            }
        }
    }

    /**
     * Solo se aceptarán extensiones en formato texto plano (TXT/HTM/HTML)
     * o archivos en formato PDF
     * @param cad
     * @return 1 Para archivos planos
     *         2 Para archivos PDF
     *         -1 Sin coincidencias contra archivos planos o archivos PDF.
     */
    private int getExtension(String cad) {
        String ext = (cad.lastIndexOf(".") == -1) ? "" : cad.substring(cad.lastIndexOf(".") + 1, cad.length());
        ext = ext.toLowerCase(); //Todo a minúsculas por si las moscas...

        if (ext.compareTo("txt") == 0
                || ext.compareTo("htm") == 0 || ext.compareTo("html") == 0) {
            return 1;
        } else if (ext.compareTo("pdf") == 0) {
            return 2;
        } else {
            return -1;
        }
    }
}
